package zhoug.zui.list;

import java.util.List;

import androidx.annotation.Nullable;

/**
 * 列表数据适配器接口
 * 支持单选和多选
 *
 * @Author: zhoug
 * @Date: 2024-07-05
 * @Description:
 */
public interface SelectListAdapter<T> {


    /**
     * 设置数据集合
     *
     * @param data
     */
    void setData(List<T> data);


    /**
     * 设置选择的数据
     *
     * @param data 选择的数据
     */
    void setSelect(List<T> data);

    /**
     * 设置选择组件
     *
     * @param data
     */
    void setSelect(T data);

    /**
     * 添加选择
     *
     * @param data
     */
    void addSelect(List<T> data);

    /**
     * 添加选择
     *
     * @param data
     */
    void addSelect(T data);

    /**
     * 清除选中
     */
    void clearSelect();

    /**
     * 清除指定的选择
     *
     * @param data
     */
    void clearSelect(T data);

    /**
     * 获取选择的数据
     *
     * @return T 数据
     */
    @Nullable
    List<T> getSelect();

    @Nullable
    T getSingleSelect();

    /**
     * 设置多选
     *
     * @param multi
     */
    void setMultiSelect(boolean multi);

    /**
     * 指定的数据是否选中
     *
     * @param data
     * @return
     */
    boolean isSelect(T data);

    /**
     * 是否是多选
     *
     * @return
     */
    boolean isMultiSelect();

    /**
     * 是否支持取消选中
     *
     * @param enabled
     */
    void setCancelSelectEnabled(boolean enabled);

    /**
     * 是否启用
     *
     * @param enabled
     */
    void setEnabled(boolean enabled);

    /**
     * 设置选择改变监听
     *
     * @param onSelectChangeListener 回调函数
     */
    void setOnSelectChangeListener(OnSelectChangeListener<T> onSelectChangeListener);

    /**
     * 刷新数据
     *
     * @param callSelectChange 是否触发{@link  OnSelectChangeListener}回调
     */
    void notifyDataChange(boolean callSelectChange);

    /**
     * 刷新数据 不触发回调
     */
    void notifyDataChange();


}
